Package org.python.pydev.editor.codecompletion.templates

Source Code of org.python.pydev.editor.codecompletion.templates.PyDocumentTemplateContext

/**
* Copyright (c) 2005-2011 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.editor.codecompletion.templates;

import java.io.File;

import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.templates.TemplateContextType;
import org.python.pydev.core.IGrammarVersionProvider;
import org.python.pydev.core.IIndentPrefs;
import org.python.pydev.core.IInterpreterInfo;
import org.python.pydev.core.IPythonNature;
import org.python.pydev.core.MisconfigurationException;
import org.python.pydev.editor.PyEdit;
import org.python.pydev.editor.autoedit.DefaultIndentPrefs;
import org.python.pydev.editor.codefolding.PySourceViewer;

import com.aptana.interactive_console.console.ui.IScriptConsoleViewer;

/**
* Makes a custom evaluation of the template buffer to be created (to put it in the correct indentation and
* change tabs to spaces -- if needed).
*
* @author Fabio
*/
public final class PyDocumentTemplateContext extends DocumentTemplateContextWithIndent {

    public ITextViewer viewer; //May be null

    /**
     * Note that it's in the default context because it should be used on subclasses.
     */
    /*default*/PyDocumentTemplateContext(TemplateContextType type, IDocument document, int offset, int length,
            String indentTo, IIndentPrefs indentPrefs) {
        super(type, document, offset, length, indentTo, indentPrefs);
    }

    public PyDocumentTemplateContext(TemplateContextType type, IDocument document, int offset, int length,
            String indentTo, ITextViewer viewer) {
        this(type, document, offset, length, indentTo, getIndentPrefs(viewer));
        this.viewer = viewer;
    }

    public boolean isCythonFile() {
        if (this.viewer instanceof PySourceViewer) {
            return ((PySourceViewer) this.viewer).getEdit().isCythonFile();
        }
        return false;
    }

    public File getEditorFile() {
        if (this.viewer instanceof PySourceViewer) {
            return ((PySourceViewer) this.viewer).getEdit().getEditorFile();
        }
        return new File("");
    }

    public int getGrammarVersion() {
        //Other possibilities
        //org.eclipse.jface.text.source.SourceViewer (in compare)

        if (this.viewer instanceof PySourceViewer) {
            try {
                IPythonNature nature = ((PySourceViewer) this.viewer).getEdit().getPythonNature();
                if (nature != null) {
                    return nature.getGrammarVersion();
                }
            } catch (MisconfigurationException e) {
            }
        }

        if (this.viewer instanceof IScriptConsoleViewer) {
            //interactive console
            IScriptConsoleViewer v = (IScriptConsoleViewer) this.viewer;
            IInterpreterInfo interpreterInfo = (IInterpreterInfo) v.getInterpreterInfo();
            if (interpreterInfo != null) {
                return interpreterInfo.getGrammarVersion();
            }

        }
        return IGrammarVersionProvider.LATEST_GRAMMAR_VERSION;
    }

    public String getModuleName() {
        if (this.viewer instanceof PySourceViewer) {
            try {
                PySourceViewer pyViewer = (PySourceViewer) this.viewer;
                PyEdit edit = pyViewer.getEdit();
                IPythonNature nature = edit.getPythonNature();
                if (nature != null) {
                    return nature.resolveModule(edit.getEditorFile());
                }
            } catch (MisconfigurationException e) {
            }
        }
        return "";
    }

    /**
     * @return the indent preferences to be used.
     */
    private static IIndentPrefs getIndentPrefs(ITextViewer viewer) {
        if (viewer instanceof PySourceViewer) {
            PySourceViewer pyViewer = (PySourceViewer) viewer;
            return pyViewer.getEdit().getIndentPrefs();
        } else {
            return DefaultIndentPrefs.get();
        }
    }

}
TOP

Related Classes of org.python.pydev.editor.codecompletion.templates.PyDocumentTemplateContext

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.